package Sort;

import java.util.Arrays;

/**
 * @author Liangyaoyun
 */
public class SelectSort {
    public void selectSort(int[] nums) {
        int tmp;
        for (int i = 0; i < nums.length - 1; i++) {
            for (int j = nums.length - 1; j > i; j--) {
                if (nums[i] > nums[j]) {
                    tmp = nums[j];
                    nums[j] = nums[i];
                    nums[i] = tmp;
                }
            }
        }

    }
    //一次遍历找到数组的最大值和最小值，减少遍历次数完成优化
    public void selectSortPlus(int[] nums) {
        int left=0;
        int right=nums.length-1;
        int tmp;
        //如果数组中有比最小值下标还要小的数，就将更小的数
        while (left<right) {
            //假定一开始的left是最小值
            //这里需要用到=号，如果不用在第一次的遍历中遍历不到边界
            for (int i = left; i <=right ; i++) {
                //如果在数组中国发现了比left还要小的值，则进行交换
                if (nums[left] > nums[i]) {
                    tmp = nums[left];
                    nums[left] = nums[i];
                    nums[i] = tmp;
                }
            }
            //假定right是最大的值
            for (int j = right; j >=left ; j--) {
                //如果在数组中发现了比right还要大的值，则进行交换
                if (nums[j] > nums[right]) {
                    tmp = nums[right];
                    nums[right] = nums[j];
                    nums[j] = tmp;
                }
            }
            left++;
            right--;
        }
    }
    public static void main(String[] args) {
        int[] nums = new int[]{9, 7, 4, 3, 2, 8, 5, 1, 6, 0};
        int[] nums1 = new int[]{8, 7, 4, 3, 2, 9, 5, 1, 6, 0};
        SelectSort selectSort = new SelectSort();
        selectSort.selectSortPlus(nums1);
        selectSort.selectSort(nums);
        System.out.println(Arrays.toString(nums1));
        System.out.println(Arrays.toString(nums));
    }
}
